Workflow publishing: contract + backend + webview/VSCode/mobile + CLI + MCP tool (#88)#95
Merged
Merged
Conversation
#88) Wires a kind toggle + required-skills picker through the shared publishSkill message, the host routing in env.ts, and every UI surface. The chain layer (publishWorkflow, publishItemIx) already existed; the gap was purely contract + UI. Also fixes publishWorkflow() to synthesize frontmatter from separate fields (mirroring publishSkill), so a clean form needs no hand-typed YAML, and extends the agent-facing publish_skill MCP tool to route to publishWorkflow when requiredSkills is non-empty. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 tasks
25 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #88. You could buy a workflow but not publish one — the on-chain program and the chain-layer
publishWorkflow()/publishItemIxalready supported it, but no UI surface exposed a kind toggle or a required-skills picker, andpublishWorkflow()had no frontmatter-synthesis fallback (unlikepublishSkill()), so a clean form couldn't publish a workflow without hand-typed YAML.publishSkillmessage gains optionalkind?: "skill" | "workflow"+requiredSkills?: string[](marketMessages.ts,protocol.ts).env.tsprefers explicitkind/requiredSkillsover the existing frontmatter-sniffing fallback (kept for back-compat).workflow.ts'spublishWorkflow()now synthesizes frontmatter from separate fields, mirroringpublishSkill()'s existing synthesis.surfaces/android/scripts/build-assets.sh):PublishForm.tsxgets a skill/workflow toggle (violet/amber, matching the existing progress-gauge theme) and a required-skills checkbox picker reusing theRegisterWorkRepopattern.SkillMarket.tsxpublish stage gets a kind toggle field and a comma-separated required-skills field resolved against owned skill mints viaownedSkillMints().publish_skillnow routes topublishWorkflowwhenrequiredSkillsis non-empty (no separatekindparam needed — structured args make it implicit). Not in issue Workflow publishing: program supports it, but no contract/backend/UI path (missing on mobile + VSCode + CLI) #88's stated scope table, included per explicit follow-up decision in this work.Dependencies / refs for the merger
cli-market-parity-93(CLI: port webview marketplace features for full parity #94, open), notmain. This PR is stacked on it — the CLI changes here assume that branch's refactoredsurfaces/cli/src/views/market/*structure. Merge CLI: port webview marketplace features for full parity #94 first, then this PR. If CLI: port webview marketplace features for full parity #94 is rebased/changed before merging, this branch will need a rebase too.mobile-skill-market-parity, open) on several files:marketMessages.ts,protocol.ts,skill-market/index.ts,env.ts/env.spec.ts,SkillMarket.tsx,localhost/index.ts. No logical conflict found — Mobile Skill Market Parity, Workflow Selling, and Plugin NFT Plumbing #56 adds aMarketItemType/plugin-card concept and doesn't touch thepublishSkillvariant itself — but expect textual merge conflicts from file proximity. Whichever of this PR / Mobile Skill Market Parity, Workflow Selling, and Plugin NFT Plumbing #56 lands second should rebase.publishWorkflow) already exists independently on currentmain(landed via an earlier commit, not through Mobile Skill Market Parity, Workflow Selling, and Plugin NFT Plumbing #56) — that part of Mobile Skill Market Parity, Workflow Selling, and Plugin NFT Plumbing #56 is effectively redundant against latestmain, unrelated to this PR.fix/workflow-selling-publish) is CLOSED — an earlier, now-superseded attempt at the sameenv.tsrouting. No action needed, just context if it comes up.feat/marketplace-message-contract(refactor(chat): single marketplace message contract shared by all surfaces #26),feat/vscode-markets-view(feat(vscode): Markets button + full-screen marketplace view #27),feat/rpc-onboarding(feat(rpc): friendly RPC config — registered Helius key beats the default (issue #23) #28),feat/publish-skill-mcp-tool(feat(skill-market): publish_skill MCP tool — the agent's publish door (#33 §B mechanism) #44),feat/wallet-signtransaction(feat: extend Wallet with on-chain signing (unblocks Track 2) #2) are all already merged (squash-merged, sogit log --oneline main..<branch>misleadingly shows "unmerged" commits — content is already inmain). Not a dependency, just avoid re-doing that work.Test plan
pnpm vitest runinpackages/core: 225/226 passing (1 pre-existing failure insearch_skills returns empty when there are no results, confirmed present oncli-market-parity-93tip before this branch's changes — unrelated to this PR).workflow.spec.ts(plain-body frontmatter synthesis + rejects missing requiredSkills),env.spec.ts(explicit kind/requiredSkills takes precedence over frontmatter-sniffing, both directions),skill-market/index.spec.ts(MCP tool routes topublishWorkflowvspublishSkill).tsc --noEmitclean inpackages/core,surfaces/cli,surfaces/webview(pre-existing unrelated unused-var warnings only).🤖 Generated with Claude Code